package com.qf.utils;

import cn.hutool.jwt.JWT;

import java.util.Date;

public class TokenUtils {
    public static final String JWT_SECRET = "qfsy2305";

    public static final String JWT_ISSUER = "FMALL";


    public static String createToken(String uuid,String username,Integer time){
        // 创建 hutool提供的jwt对象
        JWT jwt = JWT.create();
        // 设置重要信息到jwt对象中
        //1. 服务器端自己私有的用来计算jwt前面的密钥
        jwt.setKey(JWT_SECRET.getBytes());
        //2. 设置TOKEN颁发给哪个用户
        jwt.setSubject(username);
        //3. 设置TOKEN是由哪个机构颁发的
        jwt.setIssuer(JWT_ISSUER);
        //4. 设置TOKNEN的颁发时间
        jwt.setIssuedAt(new Date());
        //5. 设置TOKEN的过期时间
        jwt.setExpiresAt(new Date(System.currentTimeMillis()+1000*60*time));

        //6. 把redis中的uuid也设置到token中
        jwt.setPayload("uuid",uuid);

        // 利用jwt对象创建TOKEN字符串
        String token = jwt.sign();

        return token;
    }

    /**
     * 用来生成token的方法
     * @param username token是颁发给哪个用户的
     * @param time token的有效期，单位为 分钟
     * @return token字符串
     */
    public static String createToken(String username,Integer time){

        // 创建 hutool提供的jwt对象
        JWT jwt = JWT.create();
        // 设置重要信息到jwt对象中
        //1. 服务器端自己私有的用来计算jwt前面的密钥
        jwt.setKey(JWT_SECRET.getBytes());
        //2. 设置TOKEN颁发给哪个用户
        jwt.setSubject(username);
        //3. 设置TOKEN是由哪个机构颁发的
        jwt.setIssuer(JWT_ISSUER);
        //4. 设置TOKNEN的颁发时间
        jwt.setIssuedAt(new Date());
        //5. 设置TOKEN的过期时间
        jwt.setExpiresAt(new Date(System.currentTimeMillis()+1000*60*time));

        // 利用jwt对象创建TOKEN字符串
        String token = jwt.sign();

        return token;
    }


    public static boolean checkToken(String token){

        //1. 根据TOKEN字符串创建 一个jwt对象
        JWT jwt = JWT.of(token);

        //2. 设置用来校验TOKEN的密钥
        jwt.setKey(JWT_SECRET.getBytes());

        //3. 校验token
        boolean validate = jwt.validate(0);
        return validate;

    }

    public static void main(String[] args) {
//        String token = createToken("lisi", 10);
//        System.out.println(token);
        String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJsaXNpIiwiaXNzIjoiRk1BTEwiLCJpYXQiOjE3MDUzNjgyMjMsImV4cCI6MTcwNTM2ODgyM30.P2faF5QgBGcjTtcrJiHXER8fsIw9_XN_skMO6VnmxN8";
        System.out.println(checkToken(token));
    }

}
